﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using PAT.Entities;
using PAT.Services;
using PAT.Data.Bases;

public partial class MasterPages_PAT : System.Web.UI.MasterPage, IMaster
{
    #region Atributos y Propiedades

    /// <summary>
    /// Identificador del rol seleccionado
    /// </summary>
    private int idRol;

    /// <summary>
    /// Objeto con la información del usuario logueado
    /// </summary>
    PatUsuario usuario = new PatUsuario();

    /// <summary>
    /// Propiedad para acceder al atributo <paramref name="idRol"/>
    /// </summary>
    public int IdRol { set { idRol = value; } get { return idRol; } }

    #endregion

    #region Eventos

    /// <summary>
    /// Evento que se dispara en la carga de la página
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            usuario = RecuperarUsuarioLogueado();
            if (usuario != null)
            {
                lbUsuario.Text = usuario.Nombres + " " + usuario.Apellidos;
                CargarRoles(ObtenerRolesXUsuario());
            }
            else
                lnbLogOut_Click(sender, e);
        }
    }

    /// <summary>
    /// Evento que se dispara al cerrar la sesión del usuario logueado
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lnbLogOut_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Login.aspx");
    }

    /// <summary>
    /// Evento que se dispara al cambiar el elemento seleccionado en el combo de roles
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    protected void ddlRol_SelectedIndexChanged(object sender, EventArgs args)
    {
        if (ddlRol.SelectedValue != string.Empty)
        {
            RecuperarRolEventArgs e = new RecuperarRolEventArgs();
            e.IdRol = int.Parse(ddlRol.SelectedValue);
            OnRecuperarRol(sender, e);
        }
    }

    /// <summary>
    /// Evento necesario para cargar la información del rol en el menu de opciones
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void OnRecuperarRol(object sender, RecuperarRolEventArgs e)
    {
        if (RecuperarRol != null)
            RecuperarRol(sender, e);
    }

    #endregion

    #region Métodos

    /// <summary>
    /// Obtiene la información de la Session del usuario logueado
    /// </summary>
    /// <returns></returns>
    private PatUsuario RecuperarUsuarioLogueado()
    {
        return (PatUsuario)Session["usuario"];
    }

    /// <summary>
    /// Obtiene los roles asociados al usuario logueado
    /// </summary>
    /// <returns></returns>
    private TList<PatRol> ObtenerRolesXUsuario()
    {
        TList<PatRol> roles = new TList<PatRol>();
        PatRolService rolService = new PatRolService();
        roles = rolService.GetByIdUsuarioFromPatUsuarioRol(usuario.IdUsuario);
        return roles;
    }

    /// <summary>
    /// Enlaza el combo de roles
    /// </summary>
    /// <param name="roles"></param>
    private void CargarRoles(TList<PatRol> roles)
    {
        ddlRol.DataSource = roles;
        ddlRol.DataTextField = "DescripcionRol";
        ddlRol.DataValueField = "IdRol";
        ddlRol.DataBind();
        ddlRol.Items.Insert(0, new ListItem("--Roles--", ""));
    }

    #endregion

    #region Implementación IMaster

    /// <summary>
    /// Evento que implementa localmente la interface IMaster
    /// </summary>
    public event RecuperarRolEventHandler RecuperarRol;

    #endregion
}